/**
 * Representacion grafica de una entidad del tipo Tank, la cual
 * representa una unidad de Tanques
 */

function TankView(_troop, _map){
	var MapModule = require('ti.map');
	
	var AnnotationType = require('ui/model/constants/AnnotationType');
	var TankConstants = require('ui/model/constants/TankConstants');
	
	   		
	var self = MapModule.createAnnotation({
		//Propiedades Custom
		type: _troop.type, //Tipo de Anotacion
		enemy: _troop.enemy,
		troop: _troop, 			
		map: _map, 				//vinculo al mapa
		
		newLatitude: _troop.latitude, 		//Latitud destino cuando el usuario reubica la Tropa en el mapa
		newLongitude: _troop.longitude,	//Longitud destino cuando el usuario reubica la Tropa en el mapa
		currentLatitude: _troop.latitude,	//Variable auxiliar para almacenar la latitud actual
		currentLongitude: _troop.longitude,//Variable auxiliar para almacenar la longitud actual
		
		route: null,			//Ruta que tiene que seguir la Tropa
		routePoints:[], 		//Array de puntos que conforman la ruta
		 
		//Propiedades MapModule.Annotation
		//draggable: true, 		//indica si se puede arrastrar el annotation
		latitude: _troop.latitude,			//Latitud de la ubicacion actual
		longitude: _troop.longitude,		//Longitud de la ubicacion actual
				
		//image: '/images/tank.png',		//Imagen que representa el Annotation en el mapa
		//title: 'Tanque ' + _troop.id, 	//Titulo
		
		setNewLocation: function(){
			//Persiste la nueva ubicacion
			this.newLatitude = this.latitude;
			this.newLongitude= this.longitude;
			this.latitude = this.currentLatitude;
			this.longitude = this.currentLongitude;
			
			this.troop.calculateRoute(this.currentLatitude, this.currentLongitude, this.newLatitude, this.newLongitude);
			
		},
		
		addRoute : function (_routePoints){
			
			this.routePoints = [];
		 		
		 	//Si tiene asignada una ruta la tropa la elimina para cargar la nueva
    		if (this.route != null) {
    			//remueve la ruta del mapa
    			this.map.removeRoute(this.route);
    			this.route = null;
  				
			}
					
		 	//Si la ruta contiene puntos la agrega en el mapa
			if(_routePoints.length != 0){
						
    			//Crea la ruta para ser representada en el mapa
				this.route = MapModule.createRoute({
		    			name : 'Tank Route ' + this.troop.id,
        				points : _routePoints,
        				color : '#f0' + this.troop.id,
        				width : 4
    			});

				//Guarda los puntos de la ruta
    			this.routePoints = _routePoints;
    			
	    		//Agrega la ruta al mapa	
    			this.map.addRoute(this.route);
    		};
		},
		
		move: function(){
			
			//Indica al controlador que calcule el desplazamiento sobre los 
			//los puntos de la ruta indicados.			
			this.troop.move(this.routePoints);
			
		},
		
		setLocation :  function(_lat, _long){
			
			this.troop.setLocation(_lat,_long);
			
			this.newLatitude = _lat; 	
			this.newLongitude = _long;	
			this.currentLatitude = _lat;	
			this.currentLongitude = _long;
			this.latitude = _lat;		
			this.longitude = _long;
			
		},
		
		getDetails: function(){
			return this.troop.getDetails();
		},
		
		refresh: function(){
			this.subtitle = this.troop.getDetails();
		}
	});
	
	//Verifica si la Tropa es Enemygo o no
	if (self.enemy){
		//Pertenece al enemigo
		self.draggable= false; 							//indica si se puede arrastrar el annotation
		self.image= '/images/tankEnemy.png';			//Imagen que representa el Annotation en el mapa
		self.title= 'Tanque Enemigo ' + _troop.id; 		//Titulo	
	}
	else{
		self.draggable= true; 							//indica si se puede arrastrar el annotation
		self.image= '/images/tank.png';					//Imagen que representa el Annotation en el mapa
		self.title= 'Tanque ' + _troop.id; 				//Titulo
	}
	self.subtitle = self.troop.getDetails();
	
	self.troop.view = self;
	
	return self;
	
};

module.exports = TankView;
